/**	@file 	Sym.h
 *	@brief 	Representation of variables */
#ifndef Sym_majdo_
#define Sym_majdo_
#include "Ex.h"
#include <vector>
namespace sympycpp {
/**	@class Sym 
 *	@brief The class Sym is the representation of mathematical variables. */
class Ex;
class Sym : public Ex {
	/**	@brief The name of the stored variable.
	 * 	Variables are identificated by this name/title. 
	 * 	Two different objects-variables are equal if their names are equal. */ 
	std::string title_;
public:
	/**	@brief Construction of the variable by the name. 
	 * 	@param n is the name-identificator of the constructed variable.*/
	Sym(const std::string & n);
	virtual ~Sym() {}
	virtual std::string treeView(const int i) const;
	virtual std::string str() const;
	virtual std::string unsigned_str() const;
	virtual Ex * diff(const Sym & X) const;
	inline virtual Ex * copy() const; 
	/**	@brief The name of the variable.
	 *	@return name of the stored variable.  
	 *	This member function has the same result as the virtual member function unsigned_str() const. (this is faster)
	 *	@see unsigned_str()const
	 *	@warning The returned name is without the sign of variable (it's only the name). */
	std::string title() const;
	///	@brief The comparison of two variables [the signs of this variables are ignored].
	bool operator==(const Sym &) const;
	///	@brief The comparison of two variables [the signs of this variables are ignored].
	bool operator!=(const Sym &) const;
};
}
#endif
